package la.foton.atividade.controller;

import java.util.Collection;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import la.foton.atividade.entity.CasoDeUso;
import la.foton.atividade.entity.GrupoNegocial;
import la.foton.atividade.entity.Projeto;
import la.foton.atividade.service.CasoDeUsoService;
import la.foton.atividade.service.GrupoNegocialService;
import la.foton.atividade.service.ProjetoService;
import org.primefaces.event.RowEditEvent;

@ManagedBean(name = "grupoNegocialBean")
@RequestScoped
public class GrupoNegocialBean extends BaseBean {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

   @ManagedProperty("#{grupoNegocialService}")
   private GrupoNegocialService grupoNegocialService;
   @ManagedProperty("#{projetoService}")
   private ProjetoService projetoService;
   @ManagedProperty("#{casoDeUsoService}")
   private CasoDeUsoService casoDeUsoService;
   private List<GrupoNegocial> listAllSolicitacoes;
   private GrupoNegocial grupoNegocial;
   private List<Projeto> listAllProjetos;
   private List<CasoDeUso> listAllCasoDeUso;


	public GrupoNegocialBean()
   {

	}

   @PostConstruct
   private void init()
   {
      grupoNegocial = new GrupoNegocial();
   }

   public void incluir()
   {
      grupoNegocialService.create(grupoNegocial);
      atualizarListaSolicitacoes();
		clean();
      addInfoMessage("Grupo Negocial criada com sucesso.");
	}


   public void atualizarListaSolicitacoes()
   {
      listAllSolicitacoes = grupoNegocialService.getAll();
   }

   public void atualizarListaProjetos()
   {
      listAllProjetos = projetoService.getAll();
   }

   public void atualizarListaCasoDeUso()
   {
      listAllCasoDeUso = casoDeUsoService.getAll();
   }

   public Collection<GrupoNegocial> getValuesComboBoxGrupoNegocial()
   {
      return getListAllSolicitacoes();
   }

	public void clean() {
      /*
       * this.nomeCliente = ""; this.nomeProjeto = "";
       */
	}

	public void onEdit(RowEditEvent event) {
      GrupoNegocial grupoNegocial = (GrupoNegocial) event.getObject();
      grupoNegocialService.update(grupoNegocial);
      atualizarListaSolicitacoes();
      addInfoMessage("Solicitação alterada com sucesso!!");
	}

	public void onCancel(RowEditEvent event) {
      GrupoNegocial grupoNegocial = (GrupoNegocial) event.getObject();
      grupoNegocialService.deleteById(grupoNegocial);
      atualizarListaSolicitacoes();
      addInfoMessage(grupoNegocial.getId() + " excluido");
	}

   /**
    * Recupera o valor do atributo grupoNegocialService
    * 
    * @return o grupoNegocialService
    */
   public GrupoNegocialService getGrupoNegocialService()
   {
      return grupoNegocialService;
   }

   /**
    * Atribui o novo valor de grupoNegocialService
    * 
    * @param grupoNegocialService grupoNegocialService que será atribuído
    */
   public void setGrupoNegocialService(GrupoNegocialService grupoNegocialService)
   {
      this.grupoNegocialService = grupoNegocialService;
   }

   /**
    * Recupera o valor do atributo listAllSolicitacoes
    * 
    * @return o listAllSolicitacoes
    */
   public List<GrupoNegocial> getListAllSolicitacoes()
   {
      if (listAllSolicitacoes == null)
      {
         atualizarListaSolicitacoes();
      }
      return listAllSolicitacoes;
   }

   /**
    * Atribui o novo valor de listAllSolicitacoes
    * 
    * @param listAllSolicitacoes listAllSolicitacoes que será atribuído
    */
   public void setListAllSolicitacoes(List<GrupoNegocial> listAllSolicitacoes)
   {
      this.listAllSolicitacoes = listAllSolicitacoes;
   }


   /**
    * Recupera o valor do atributo grupoNegocial
    * 
    * @return o grupoNegocial
    */
   public GrupoNegocial getGrupoNegocial()
   {
      return grupoNegocial;
   }

   /**
    * Atribui o novo valor de grupoNegocial
    * 
    * @param grupoNegocial grupoNegocial que será atribuído
    */
   public void setGrupoNegocial(GrupoNegocial grupoNegocial)
   {
      this.grupoNegocial = grupoNegocial;
   }

   /**
    * Recupera o valor do atributo projetoService
    * 
    * @return o projetoService
    */
   public ProjetoService getProjetoService()
   {
      return projetoService;
   }

   /**
    * Atribui o novo valor de projetoService
    * 
    * @param projetoService projetoService que será atribuído
    */
   public void setProjetoService(ProjetoService projetoService)
   {
      this.projetoService = projetoService;
   }

   /**
    * Recupera o valor do atributo listAllProjetos
    * 
    * @return o listAllProjetos
    */
   public List<Projeto> getListAllProjetos()
   {
      if (listAllProjetos == null)
      {
         atualizarListaProjetos();
      }

      return listAllProjetos;
   }

   /**
    * Atribui o novo valor de listAllProjetos
    * 
    * @param listAllProjetos listAllProjetos que será atribuído
    */
   public void setListAllProjetos(List<Projeto> listAllProjetos)
   {
      this.listAllProjetos = listAllProjetos;
   }

   /**
    * Recupera o valor do atributo casoDeUsoService
    * 
    * @return o casoDeUsoService
    */
   public CasoDeUsoService getCasoDeUsoService()
   {
      return casoDeUsoService;
   }

   /**
    * Atribui o novo valor de casoDeUsoService
    * 
    * @param casoDeUsoService casoDeUsoService que será atribuído
    */
   public void setCasoDeUsoService(CasoDeUsoService casoDeUsoService)
   {
      this.casoDeUsoService = casoDeUsoService;
   }


   /**
    * Recupera o valor do atributo listAllCasoDeUso
    * @return o listAllCasoDeUso
    */
   public List<CasoDeUso> getListAllCasoDeUso()
   {
      if (listAllCasoDeUso == null)
      {
         atualizarListaCasoDeUso();
      }

      return listAllCasoDeUso;
   }


   /**
    * Atribui o novo valor de listAllCasoDeUso
    * @param listAllCasoDeUso listAllCasoDeUso que será atribuído
    */
   public void setListAllCasoDeUso(List<CasoDeUso> listAllCasoDeUso)
   {
      this.listAllCasoDeUso = listAllCasoDeUso;
   }


}
